package com.atguigu.daijia.map.service;

import com.atguigu.daijia.model.form.map.OrderServiceLocationForm;
import com.atguigu.daijia.model.form.map.SearchNearByDriverForm;
import com.atguigu.daijia.model.form.map.UpdateDriverLocationForm;
import com.atguigu.daijia.model.form.map.UpdateOrderLocationForm;
import com.atguigu.daijia.model.vo.map.NearByDriverVo;
import com.atguigu.daijia.model.vo.map.OrderLocationVo;
import com.atguigu.daijia.model.vo.map.OrderServiceLastLocationVo;

import java.math.BigDecimal;
import java.util.List;

public interface LocationService {

    /**
     * 司机开始接单，更新司机位置信息
     * @param updateDriverLocationForm
     * @return
     */
    Boolean updateDriverLocation(UpdateDriverLocationForm updateDriverLocationForm);

    /**
     * 司机停止接单，删除司机位置信息
     * @param driverId
     * @return
     */
    Boolean removeDriverLocation(Long driverId);

    /**
     * 查询附近适合接单的司机
     * @param searchNearByDriverForm
     * @return
     */
    List<NearByDriverVo> searchNearByDriver(SearchNearByDriverForm searchNearByDriverForm);

    /**
     * 接单司机前往代驾订单起始点过程中更新司机位置信息到缓存
     * @param updateOrderLocationForm
     * @return
     */
    Boolean updateDriverLocationToCache(UpdateOrderLocationForm updateOrderLocationForm);

    /**
     * 从缓存中获取接单司机前往代驾订单起始点过程中的位置信息
     * @param orderId
     * @return
     */
    OrderLocationVo getDriverLocationFromCache(Long orderId);

    /**
     * 开始代驾服务后，批量保存订单服务过程中司机位置信息
     * @param orderServiceLocationFormList
     * @return
     */
    Boolean batchSaveLocationDuringService(List<OrderServiceLocationForm> orderServiceLocationFormList);

    /**
     * 开始代驾服务后，定时获取订单服务期间司机的最新位置信息
     * @param orderId
     * @return
     */
    OrderServiceLastLocationVo getOrderServiceLastLocation(Long orderId);

    /**
     * 计算订单实际距离
     * @param orderId
     * @return
     */
    BigDecimal calculateOrderRealDistance(Long orderId);
}
